package twoSearh;

import java.util.Arrays;

/**
 * @author TangYuan
 * @className SearchToIndex
 * @description 二分法
 * @date 2020/2/5 15:47
 */
public class SearchToIndex {

    public static void main(String[] args) {
        int[] num = new int[]{5, 6, 66, 89, 122, 333};
        int m  = 89;
        int n = 90;
        int a  = search(num,m);
        int b  = search(num,n);
        System.out.println("查找结果"+a);
        System.out.println("查找结果"+b);

        System.out.println("查找结果是：：：：：：：：："+searchToIndex(num,80));
        System.out.println("查找结果是：：：：：：：：："+searchToIndex(num,100));
    }


    /**功能描述
    @author TangYuan
    @date 2020/2/5 16:15
    @return 查找结果
     @description 二分法查找指定元素是否存在给定的数组中,存在，返回元素所在的索引，不存在返回-1
    */
   private static int search(int[] nums,int number){
        int i  = Arrays.binarySearch(nums, number);
        if(i>=0){
            return i;
        }else {
            return -1;
        }
   }



    /**功能描述
     @author TangYuan
     @date 2020/2/5 16:15
     @return 查找结果
     @description 给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
     */
    private static int searchToIndex(int[] nums,int target){
        int min = 0;
        int max = nums.length-1;

        while (min<=max){
            int mid = (min+max)/2;
            if(target>nums[mid]){
                min = mid+1;
            }else if(target<nums[mid]){
                max = mid-1;
            }else{
                return mid;
            }
        }
        return min;


    }
}
